package com.ycsyxt.guide;

import java.util.ArrayList;
import java.util.List;

import com.google.common.collect.Lists;

/**
 * 1. 从n个不同的元素中取出m个不同的元素，按照一定的顺序排成一列，这个过程就叫排列。
 * 当n==m的时候，这就是全排列
 * 2. 排列可以穷举出随机变量的所有可能性
 * 3. 很多很小的地方都会用到排列，很多数学思维都默默无闻。
 * @author ycs(15241496739 @ 163.com)
 * @date 2022/6/5
 **/
public class Class7 {
    public static List<List<Integer>> paths = new ArrayList<>();
    public static List<Integer> path = new ArrayList<>();
    public static void getResult(List<Integer> horses, boolean[] used) {
        if (horses.size() == path.size()) {
            paths.add(new ArrayList<>(path));
            return;
        }
        for (int i = 0; i < horses.size(); i++) {
            if (used[i]) {
                continue;
            }
            path.add(horses.get(i));
            used[i] = true;
            getResult(horses, used);
            used[i] = false;
            path.remove(path.size() - 1);
        }
    }
    public static void main(String[] args) {
        List<Integer> a = Lists.newArrayList(2, 4, 6);
        List<Integer> b = Lists.newArrayList(3, 5, 7);
        boolean[] used = new boolean[a.size()];
        getResult(a, used);
        List<List<Integer>> t = new ArrayList<>(paths);
        paths = new ArrayList<>();
        path = new ArrayList<>();
        getResult(b, used);
        List<List<Integer>> q = new ArrayList<>(paths);
        for (List<Integer> ti : t) {
            for (List<Integer> qi : q) {
                int sum = 0;
                for (int i = 0; i < ti.size(); i++) {
                    if (ti.get(i) > qi.get(i)) {
                        sum++;
                    }
                }
                if (sum > 1) {
                    System.out.println(ti);
                    System.out.println(qi);
                    System.out.println("田忌胜利");
                }
            }
        }

    }
}
